#ifndef _HUNTER_H
#define _HUNTER_H

#include "character.h"
class Source;
class Level;
struct Point2;

//#define HUNTER_STATE_JUMP 101
//#define HUNTER_STATE_SHOOT 102
#define STATE_RELOAD 103

#define AIM_UP 1
#define AIM_DOWN 2
#define AIM_STRAIGHT 3
#define AIM_PREVIOUS 4

class Hunter: public Character{

public:

	Hunter();
	~Hunter();

	Animation* ani_stand;	
	Animation* ani_run;
	Animation* ani_jump;
	Animation* ani_fall;
	Animation* ani_aim_up;	
	Animation* ani_aim_down;
	Animation* ani_shoot;	
	Animation* ani_shoot_up;	
	Animation* ani_shoot_down;	
	Animation* ani_dead;	
	Animation* ani_reload;	

	Source* src_shoot;
	int ammo;
	int max_ammo;

	float jump_speed;
	float jump_mult;
	float shooting_level, shooting_level_up, shooting_level_down;
	float u_correct, s_correct, d_correct;
	float die_jump;
	int aim;

//	void (*set_func)(Level* level, Hunter* player, Point2* acc, float dt);//?
	void (Hunter::*set_func)(Level* level, Point2* acc, float dt);
//	void setState(int state, int argument);
	void update(Level* level, Point2* acc, float dt);

	void still(Level* level, Point2* acc, float dt);
	void shoot(Level* level, Point2* acc, float dt);
	void move(Level* level, Point2* acc, float dt);
	void jump(Level* level, Point2* acc, float dt);
	void fall(Level* level, Point2* acc, float dt);
	void die(Level* level, Point2* acc, float dt);
	void reload(Level* level, Point2* acc, float dt);

	void setStill(int argument);
	void setMove(int argument);
	void setJump(int argument);
	void setFall(int argument);
	void setDead(int argument);
	void setAttack(int argument);
	void setReload(int argument);

	float get_xLo();
	float get_xHi();
	float get_yLo();
	float get_yHi();
	float get_pic_xLo();
	float get_pic_xHi();
	float get_pic_yLo();
	float get_pic_yHi();

	Rect* getBody();
	Rect* getBox();
};

#endif